//
//  HMComposeView.swift
//  weibo1
//
//  Created by 代亚洲 on 16/4/25.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import pop
/// 背景 view
class HMComposeView: UIView {
    
 /// 按钮数组
    lazy var menuButtons: [HMComposeMenuButton] = []
    
 /// 模型数组
    lazy var array:[HMComposeMenuItemInfo] = {
//        要用self 在闭包中找不到
        return self.itemInfos()
    }()
    

    
    // 当前视图添加到的控制器
    var target: UIViewController?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
  // MARK: - 给外界调用的方法
    func show(target: UIViewController?) {
        target?.view.addSubview(self)
        // 记录外界传入的target
        self.target = target
    }
    
    // MARK: - 设置ui
    
    private func setupUI(){
        
        
        frame = UIScreen.mainScreen().bounds
//        self.backgroundColor = UIColor.blueColor()
//       设置背景图片的磨砂效果
        let iamge = UIImage.getScreenShot().applyLightEffect()
        let imageview = UIImageView(image: iamge)
//       添加背景图片
        addSubview(imageview)
//        标语
        addSubview(sloganImage)
        sloganImage.snp_makeConstraints { (make) -> Void in
            make.centerX.equalTo(self)
            make.top.equalTo(100)
        }
//       添加菜单按钮
        addMenuButtons()
    }
//    添加菜单按钮
    func addMenuButtons(){
        let itemW: CGFloat = 80
        let itemH: CGFloat = 110
//        按钮的间距为屏幕w 减去所有按钮宽除以间距个数
        let margin = (SCREENW - 3 * itemW)/4

//        循环添加按钮
//                     数组中的内容
        for (i,value) in array.enumerate(){
//        添加按钮 字体颜色 大小
//            按钮内容显示左右 改成上下
        let buttonde = HMComposeMenuButton(textColor: UIColor.darkGrayColor(), fontSize: 14)
        // 绑定tag以便获取数据
//            监听按钮的点击事件
        buttonde.addTarget(self, action: "menuButtonClick:", forControlEvents: UIControlEvents.TouchUpInside)
        buttonde.tag = i
//            按钮名字 状态
        buttonde.setTitle(value.title, forState: UIControlState.Normal)
//            print(value.title)
        buttonde.setImage((UIImage(named:value.icon!)), forState: UIControlState.Normal)
        buttonde.frame.size = CGSizeMake(itemW, itemH)
//        添加到view上
        addSubview(buttonde)
           
//            添加到数组中
        menuButtons.append(buttonde)
//             print(buttonde)
            // 调整位置
            // 0. 计算列数与行数
            let col = i % 3
            let row = i / 3
            
            // 1. 计算x值
            buttonde.frame.origin.x = CGFloat(col) * itemW + CGFloat(col + 1) * margin
            // 2. 计算y值
            buttonde.frame.origin.y = CGFloat(row) * itemH + CGFloat(row) * 10+SCREENH
//            i=i+1
        }
    }
    
    deinit {
        print("我销毁啦！")
    }
    /// 加载模型数据
    
    func itemInfos() -> [HMComposeMenuItemInfo]{
        //       从pist中读取数据
        let path = NSBundle.mainBundle().pathForResource("compose.plist", ofType: nil)!
        //        从路径中读取数据到数组
        let array = NSArray(contentsOfFile:path)!
        //      创建临时数组
        var mutaarray : [HMComposeMenuItemInfo] = []
        //        遍历数组
        for value in array {
            //            字典转模型
            let info = HMComposeMenuItemInfo(dict: value as! [String : AnyObject])
            //            添加到数组
            mutaarray.append(info)
        }
        return mutaarray
    }
//   跳转到当前视图前会调用这个方法
//    动画效果
    override func didMoveToSuperview() {
        super.didMoveToSuperview()
        
        for (i,value) in menuButtons.enumerate(){
        // 1. 初始化动画的对象
            let anim = POPSpringAnimation(propertyNamed: kPOPViewCenter)
            // 2. 指定动画要执行的结束位置 x值不变 y值向上偏移350
            anim.toValue = NSValue(CGPoint:CGPoint(x: value.center.x, y: value.center.y-350))
            // 3. 设置动画的一些属性
//            反弹效果
            anim.springSpeed = 10
            anim.springBounciness = 8
//            4添加动画
            value.pop_addAnimation(anim, forKey: nil)
            anim.beginTime = Double(i) * 0.025 + CACurrentMediaTime()
            value.pop_addAnimation(anim, forKey: nil)
        }
    }
    
    // MARK: - 点击屏幕
    //    点击图片移除self
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        //        移除self view
        removeFromSuperview()
    }
    
    
    // MARK: - 懒加载
    // 标语
    private lazy var sloganImage = UIImageView(image: UIImage(named: "compose_slogan"))
//    private lazy var sloganImage :UIImageView = {
//        
//        let imageview = UIImageView(image: (UIImage(named: "compose_slogan")))
//        
//        imageview.sizeToFit()
//        
//        return imageview
//        }()
    
//    
    
    func menuButtonClick(button : UIButton){
//        设置动画时间 执行动画 动画结束后调用的方法
        //        UIView.animateWithDuration(<#T##duration: NSTimeInterval##NSTimeInterval#>, animations: <#T##() -> Void#>, completion: <#T##((Bool) -> Void)?##((Bool) -> Void)?##(Bool) -> Void#>)
        //
      
        UIView.animateWithDuration(0.25, animations: { () -> Void in
            //        遍历按钮数组  在闭包内部所以要用self
            for value in self.menuButtons{
                //            设置透明度
                value.alpha = 0.01
                //            判断当前按钮是不是点击的按钮
                if value == button {
                    //                是就让这个按钮放大两倍
                    value.transform = CGAffineTransformMakeScale(2, 2)
                }else{
                    //                不是就让按钮方大0.01倍 （缩小）
                    value.transform = CGAffineTransformMakeScale(0.01, 0.01)
                }
            }
//            动画执行完成 跳转控制器
            }) { (_) -> Void in
                // 取到模型
                let model = self.array[button.tag]
                // 测试代码：查看class的String是什么 反推className是什么类型
//                 let className = NSStringFromClass(HMComposeViewController.self)
//                 let clazz = NSClassFromString("Weibo01.HMComposeViewController")
//                 print(className)
//                print(clazz)
                let type = NSClassFromString(model.className!)! as! UIViewController.Type
                let vc = type.init()
                // 怎么取
                self.target?.presentViewController(UINavigationController(rootViewController: vc), animated: true, completion: { () -> Void in
//                    移除当前view
                    self.removeFromSuperview()
                })
                
        }
        
}
    
    
}